home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / 1943.c < prev    next >
C/C++ Source or Header  |  2000-04-23  |  20KB  |  482 lines

  1. /*
  2.  
  3. TODO: 1943 is almost identical to GunSmoke (one more scrolling playfield). We
  4.       should merge the two drivers.
  5. */
  6.  
  7. #include "driver.h"
  8. #include "vidhrdw/generic.h"
  9. #include "cpu/z80/z80.h"
  10.  
  11.  
  12.  
  13. extern unsigned char *c1943_scrollx;
  14. extern unsigned char *c1943_scrolly;
  15. extern unsigned char *c1943_bgscrolly;
  16. WRITE_HANDLER( c1943_c804_w );    /* in vidhrdw/c1943.c */
  17. WRITE_HANDLER( c1943_d806_w );    /* in vidhrdw/c1943.c */
  18. void c1943_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
  19. void c1943_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  20. int c1943_vh_start(void);
  21. void c1943_vh_stop(void);
  22.  
  23.  
  24.  
  25. /* this is a protection check. The game crashes (thru a jump to 0x8000) */
  26. /* if a read from this address doesn't return the value it expects. */
  27. static READ_HANDLER( c1943_protection_r )
  28. {
  29.     int data = cpu_get_reg(Z80_BC) >> 8;
  30.     logerror("protection read, PC: %04x Result:%02x\n",cpu_get_pc(),data);
  31.     return data;
  32. }
  33.  
  34.  
  35.  
  36. static struct MemoryReadAddress readmem[] =
  37. {
  38.     { 0x0000, 0x7fff, MRA_ROM },
  39.     { 0x8000, 0xbfff, MRA_BANK1 },
  40.     { 0xd000, 0xd7ff, MRA_RAM },
  41.     { 0xc000, 0xc000, input_port_0_r },
  42.     { 0xc001, 0xc001, input_port_1_r },
  43.     { 0xc002, 0xc002, input_port_2_r },
  44.     { 0xc003, 0xc003, input_port_3_r },
  45.     { 0xc004, 0xc004, input_port_4_r },
  46.     { 0xc007, 0xc007, c1943_protection_r },
  47.     { 0xe000, 0xffff, MRA_RAM },
  48.     { -1 }    /* end of table */
  49. };
  50.  
  51. static struct MemoryWriteAddress writemem[] =
  52. {
  53.     { 0x0000, 0xbfff, MWA_ROM },
  54.     { 0xc800, 0xc800, soundlatch_w },
  55.     { 0xc804, 0xc804, c1943_c804_w },    /* ROM bank switch, screen flip */
  56.     { 0xc806, 0xc806, watchdog_reset_w },
  57.     { 0xc807, 0xc807, MWA_NOP },     /* protection chip write (we don't emulate it) */
  58.     { 0xd000, 0xd3ff, videoram_w, &videoram, &videoram_size },
  59.     { 0xd400, 0xd7ff, colorram_w, &colorram },
  60.     { 0xd800, 0xd801, MWA_RAM, &c1943_scrolly },
  61.     { 0xd802, 0xd802, MWA_RAM, &c1943_scrollx },
  62.     { 0xd803, 0xd804, MWA_RAM, &c1943_bgscrolly },
  63.     { 0xd806, 0xd806, c1943_d806_w },    /* sprites, bg1, bg2 enable */
  64.     { 0xe000, 0xefff, MWA_RAM },
  65.     { 0xf000, 0xffff, MWA_RAM, &spriteram, &spriteram_size },
  66.     { -1 }    /* end of table */
  67. };
  68.  
  69.  
  70. static struct MemoryReadAddress sound_readmem[] =
  71. {
  72.     { 0x0000, 0x7fff, MRA_ROM },
  73.     { 0xc000, 0xc7ff, MRA_RAM },
  74.     { 0xc800, 0xc800, soundlatch_r },
  75.     { -1 }    /* end of table */
  76. };
  77.  
  78. static struct MemoryWriteAddress sound_writemem[] =
  79. {
  80.     { 0x0000, 0x7fff, MWA_ROM },
  81.     { 0xc000, 0xc7ff, MWA_RAM },
  82.     { 0xe000, 0xe000, YM2203_control_port_0_w },
  83.     { 0xe001, 0xe001, YM2203_write_port_0_w },
  84.     { 0xe002, 0xe002, YM2203_control_port_1_w },
  85.     { 0xe003, 0xe003, YM2203_write_port_1_w },
  86.     { -1 }    /* end of table */
  87. };
  88.  
  89.  
  90.  
  91. INPUT_PORTS_START( 1943 )
  92.     PORT_START    /* IN0 */
  93.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  94.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  95.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
  96.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* actually, this is VBLANK */
  97.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* probably unused */
  98.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* probably unused */
  99.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
  100.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
  101.  
  102.     PORT_START    /* IN1 */
  103.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  104.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
  105.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
  106.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
  107.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  108.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
  109.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* Button 3, probably unused */
  110.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
  111.  
  112.     PORT_START    /* IN2 */
  113.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
  114.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
  115.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
  116.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
  117.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
  118.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
  119.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* Button 3, probably unused */
  120.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
  121.  
  122.     PORT_START    /* DSW0 */
  123.     PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Difficulty ) )
  124.     PORT_DIPSETTING(    0x0f, "1 (Easiest)" )
  125.     PORT_DIPSETTING(    0x0e, "2" )
  126.     PORT_DIPSETTING(    0x0d, "3" )
  127.     PORT_DIPSETTING(    0x0c, "4" )
  128.     PORT_DIPSETTING(    0x0b, "5" )
  129.     PORT_DIPSETTING(    0x0a, "6" )
  130.     PORT_DIPSETTING(    0x09, "7" )
  131.     PORT_DIPSETTING(    0x08, "8" )
  132.     PORT_DIPSETTING(    0x07, "9" )
  133.     PORT_DIPSETTING(    0x06, "10" )
  134.     PORT_DIPSETTING(    0x05, "11" )
  135.     PORT_DIPSETTING(    0x04, "12" )
  136.     PORT_DIPSETTING(    0x03, "13" )
  137.     PORT_DIPSETTING(    0x02, "14" )
  138.     PORT_DIPSETTING(    0x01, "15" )
  139.     PORT_DIPSETTING(    0x00, "16 (Hardest)" )
  140.     PORT_DIPNAME( 0x10, 0x10, "2 Players Game" )
  141.     PORT_DIPSETTING(    0x00, "1 Credit" )
  142.     PORT_DIPSETTING(    0x10, "2 Credits" )
  143.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) )
  144.     PORT_DIPSETTING(    0x20, DEF_STR( Off ))
  145.     PORT_DIPSETTING(    0x00, DEF_STR( On ))
  146.     PORT_DIPNAME( 0x40, 0x40, "Freeze" )
  147.     PORT_DIPSETTING(    0x40, DEF_STR( Off ))
  148.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  149.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  150.  
  151.     PORT_START      /* DSW1 */
  152.     PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) )
  153.     PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ))
  154.     PORT_DIPSETTING(    0x01, DEF_STR( 3C_1C ) )
  155.     PORT_DIPSETTING(    0x02, DEF_STR( 2C_1C ) )
  156.     PORT_DIPSETTING(    0x07, DEF_STR( 1C_1C ) )
  157.     PORT_DIPSETTING(    0x06, DEF_STR( 1C_2C ) )
  158.     PORT_DIPSETTING(    0x05, DEF_STR( 1C_3C ) )
  159.     PORT_DIPSETTING(    0x04, DEF_STR( 1C_4C ) )
  160.     PORT_DIPSETTING(    0x03, DEF_STR( 1C_5C ) )
  161.     PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) )
  162.     PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ))
  163.     PORT_DIPSETTING(    0x08, DEF_STR( 3C_1C ) )
  164.     PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) )
  165.     PORT_DIPSETTING(    0x38, DEF_STR( 1C_1C ) )
  166.     PORT_DIPSETTING(    0x30, DEF_STR( 1C_2C ) )
  167.     PORT_DIPSETTING(    0x28, DEF_STR( 1C_3C ) )
  168.     PORT_DIPSETTING(    0x20, DEF_STR( 1C_4C ) )
  169.     PORT_DIPSETTING(    0x18, DEF_STR( 1C_5C ) )
  170.     PORT_DIPNAME( 0x40, 0x40, "Allow Continue" )
  171.     PORT_DIPSETTING(    0x00, DEF_STR( No ) )
  172.     PORT_DIPSETTING(    0x40, DEF_STR( Yes ) )
  173.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
  174.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  175.     PORT_DIPSETTING(    0x80, DEF_STR( On ) )
  176. INPUT_PORTS_END
  177.  
  178.  
  179.  
  180. static struct GfxLayout charlayout =
  181. {
  182.     8,8,    /* 8*8 characters */
  183.     2048,    /* 2048 characters */
  184.     2,    /* 2 bits per pixel */
  185.     { 4, 0 },
  186.     { 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3 },
  187.     { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
  188.     16*8    /* every char takes 16 consecutive bytes */
  189. };
  190. static struct GfxLayout spritelayout =
  191. {
  192.     16,16,    /* 16*16 sprites */
  193.     2048,    /* 2048 sprites */
  194.     4,    /* 4 bits per pixel */
  195.     { 2048*64*8+4, 2048*64*8+0, 4, 0 },
  196.     { 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3,
  197.             32*8+0, 32*8+1, 32*8+2, 32*8+3, 33*8+0, 33*8+1, 33*8+2, 33*8+3 },
  198.     { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
  199.             8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
  200.     64*8    /* every sprite takes 64 consecutive bytes */
  201. };
  202. static struct GfxLayout fgtilelayout =
  203. {
  204.     32,32,  /* 32*32 tiles */
  205.     512,    /* 512 tiles */
  206.     4,      /* 4 bits per pixel */
  207.     { 512*256*8+4, 512*256*8+0, 4, 0 },
  208.     { 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3,
  209.             64*8+0, 64*8+1, 64*8+2, 64*8+3, 65*8+0, 65*8+1, 65*8+2, 65*8+3,
  210.             128*8+0, 128*8+1, 128*8+2, 128*8+3, 129*8+0, 129*8+1, 129*8+2, 129*8+3,
  211.             192*8+0, 192*8+1, 192*8+2, 192*8+3, 193*8+0, 193*8+1, 193*8+2, 193*8+3 },
  212.     { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
  213.             8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16,
  214.             16*16, 17*16, 18*16, 19*16, 20*16, 21*16, 22*16, 23*16,
  215.             24*16, 25*16, 26*16, 27*16, 28*16, 29*16, 30*16, 31*16 },
  216.     256*8    /* every tile takes 256 consecutive bytes */
  217. };
  218. static struct GfxLayout bgtilelayout =
  219. {
  220.     32,32,  /* 32*32 tiles */
  221.     128,    /* 128 tiles */
  222.     4,      /* 4 bits per pixel */
  223.     { 128*256*8+4, 128*256*8+0, 4, 0 },
  224.     { 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3,
  225.             64*8+0, 64*8+1, 64*8+2, 64*8+3, 65*8+0, 65*8+1, 65*8+2, 65*8+3,
  226.             128*8+0, 128*8+1, 128*8+2, 128*8+3, 129*8+0, 129*8+1, 129*8+2, 129*8+3,
  227.             192*8+0, 192*8+1, 192*8+2, 192*8+3, 193*8+0, 193*8+1, 193*8+2, 193*8+3 },
  228.     { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
  229.             8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16,
  230.             16*16, 17*16, 18*16, 19*16, 20*16, 21*16, 22*16, 23*16,
  231.             24*16, 25*16, 26*16, 27*16, 28*16, 29*16, 30*16, 31*16 },
  232.     256*8    /* every tile takes 256 consecutive bytes */
  233. };
  234.  
  235.  
  236.  
  237. static struct GfxDecodeInfo gfxdecodeinfo[] =
  238. {
  239.     { REGION_GFX1, 0, &charlayout,                  0, 32 },
  240.     { REGION_GFX2, 0, &fgtilelayout,             32*4, 16 },
  241.     { REGION_GFX3, 0, &bgtilelayout,       32*4+16*16, 16 },
  242.     { REGION_GFX4, 0, &spritelayout, 32*4+16*16+16*16, 16 },
  243.     { -1 } /* end of array */
  244. };
  245.  
  246.  
  247.  
  248. static struct YM2203interface ym2203_interface =
  249. {
  250.     2,            /* 2 chips */
  251.     1500000,    /* 1.5 MHz */
  252.     { YM2203_VOL(10,15), YM2203_VOL(10,15) },
  253.     { 0 },
  254.     { 0 },
  255.     { 0 },
  256.     { 0 }
  257. };
  258.  
  259.  
  260.  
  261. static struct MachineDriver machine_driver_1943 =
  262. {
  263.     /* basic machine hardware */
  264.     {
  265.         {
  266.             CPU_Z80,
  267.             6000000,    /* 6 Mhz */
  268.             readmem,writemem,0,0,
  269.             interrupt,1
  270.         },
  271.         {
  272.             CPU_Z80 | CPU_AUDIO_CPU,
  273.             3000000,    /* 3 Mhz */
  274.             sound_readmem,sound_writemem,0,0,
  275.             interrupt,4
  276.         }
  277.     },
  278.     60, DEFAULT_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  279.     1,    /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
  280.     0,
  281.  
  282.     /* video hardware */
  283.     32*8, 32*8, { 0*8, 32*8-1, 2*8, 30*8-1 },
  284.     gfxdecodeinfo,
  285.     256,32*4+16*16+16*16+16*16,
  286.     c1943_vh_convert_color_prom,
  287.  
  288.     VIDEO_TYPE_RASTER,
  289.     0,
  290.     c1943_vh_start,
  291.     c1943_vh_stop,
  292.     c1943_vh_screenrefresh,
  293.  
  294.     /* sound hardware */
  295.     0,0,0,0,
  296.     {
  297.         {
  298.             SOUND_YM2203,
  299.             &ym2203_interface
  300.         }
  301.     }
  302. };
  303.  
  304.  
  305.  
  306. /***************************************************************************
  307.  
  308.   Game driver(s)
  309.  
  310. ***************************************************************************/
  311.  
  312. ROM_START( 1943 )
  313.     ROM_REGION( 0x30000, REGION_CPU1 )    /* 64k for code + 128k for the banked ROMs images */
  314.     ROM_LOAD( "1943.01",      0x00000, 0x08000, 0xc686cc5c )
  315.     ROM_LOAD( "1943.02",      0x10000, 0x10000, 0xd8880a41 )
  316.     ROM_LOAD( "1943.03",      0x20000, 0x10000, 0x3f0ee26c )
  317.  
  318.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the audio CPU */
  319.     ROM_LOAD( "1943.05",      0x00000, 0x8000, 0xee2bd2d7 )
  320.  
  321.     ROM_REGION( 0x8000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  322.     ROM_LOAD( "1943.04",      0x00000, 0x8000, 0x46cb9d3d )    /* characters */
  323.  
  324.     ROM_REGION( 0x40000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  325.     ROM_LOAD( "1943.15",      0x00000, 0x8000, 0x6b1a0443 )    /* bg tiles */
  326.     ROM_LOAD( "1943.16",      0x08000, 0x8000, 0x23c908c2 )
  327.     ROM_LOAD( "1943.17",      0x10000, 0x8000, 0x46bcdd07 )
  328.     ROM_LOAD( "1943.18",      0x18000, 0x8000, 0xe6ae7ba0 )
  329.     ROM_LOAD( "1943.19",      0x20000, 0x8000, 0x868ababc )
  330.     ROM_LOAD( "1943.20",      0x28000, 0x8000, 0x0917e5d4 )
  331.     ROM_LOAD( "1943.21",      0x30000, 0x8000, 0x9bfb0d89 )
  332.     ROM_LOAD( "1943.22",      0x38000, 0x8000, 0x04f3c274 )
  333.  
  334.     ROM_REGION( 0x10000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  335.     ROM_LOAD( "1943.24",      0x00000, 0x8000, 0x11134036 )    /* fg tiles */
  336.     ROM_LOAD( "1943.25",      0x08000, 0x8000, 0x092cf9c1 )
  337.  
  338.     ROM_REGION( 0x40000, REGION_GFX4 | REGIONFLAG_DISPOSE )
  339.     ROM_LOAD( "1943.06",      0x00000, 0x8000, 0x97acc8af )    /* sprites */
  340.     ROM_LOAD( "1943.07",      0x08000, 0x8000, 0xd78f7197 )
  341.     ROM_LOAD( "1943.08",      0x10000, 0x8000, 0x1a626608 )
  342.     ROM_LOAD( "1943.09",      0x18000, 0x8000, 0x92408400 )
  343.     ROM_LOAD( "1943.10",      0x20000, 0x8000, 0x8438a44a )
  344.     ROM_LOAD( "1943.11",      0x28000, 0x8000, 0x6c69351d )
  345.     ROM_LOAD( "1943.12",      0x30000, 0x8000, 0x5e7efdb7 )
  346.     ROM_LOAD( "1943.13",      0x38000, 0x8000, 0x1143829a )
  347.  
  348.     ROM_REGION( 0x10000, REGION_GFX5 )    /* tilemaps */
  349.     ROM_LOAD( "1943.14",      0x0000, 0x8000, 0x4d3c6401 )    /* front background */
  350.     ROM_LOAD( "1943.23",      0x8000, 0x8000, 0xa52aecbd )    /* back background */
  351.  
  352.     ROM_REGION( 0x0c00, REGION_PROMS )
  353.     ROM_LOAD( "bmprom.01",    0x0000, 0x0100, 0x74421f18 )    /* red component */
  354.     ROM_LOAD( "bmprom.02",    0x0100, 0x0100, 0xac27541f )    /* green component */
  355.     ROM_LOAD( "bmprom.03",    0x0200, 0x0100, 0x251fb6ff )    /* blue component */
  356.     ROM_LOAD( "bmprom.05",    0x0300, 0x0100, 0x206713d0 )    /* char lookup table */
  357.     ROM_LOAD( "bmprom.10",    0x0400, 0x0100, 0x33c2491c )    /* foreground lookup table */
  358.     ROM_LOAD( "bmprom.09",    0x0500, 0x0100, 0xaeea4af7 )    /* foreground palette bank */
  359.     ROM_LOAD( "bmprom.12",    0x0600, 0x0100, 0xc18aa136 )    /* background lookup table */
  360.     ROM_LOAD( "bmprom.11",    0x0700, 0x0100, 0x405aae37 )    /* background palette bank */
  361.     ROM_LOAD( "bmprom.08",    0x0800, 0x0100, 0xc2010a9e )    /* sprite lookup table */
  362.     ROM_LOAD( "bmprom.07",    0x0900, 0x0100, 0xb56f30c3 )    /* sprite palette bank */
  363.     ROM_LOAD( "bmprom.04",    0x0a00, 0x0100, 0x91a8a2e1 )    /* priority encoder / palette selector (not used) */
  364.     ROM_LOAD( "bmprom.06",    0x0b00, 0x0100, 0x0eaf5158 )    /* video timing (not used) */
  365. ROM_END
  366.  
  367. ROM_START( 1943j )
  368.     ROM_REGION( 0x30000, REGION_CPU1 )    /* 64k for code + 128k for the banked ROMs images */
  369.     ROM_LOAD( "1943jap.001",  0x00000, 0x08000, 0xf6935937 )
  370.     ROM_LOAD( "1943jap.002",  0x10000, 0x10000, 0xaf971575 )
  371.     ROM_LOAD( "1943jap.003",  0x20000, 0x10000, 0x300ec713 )
  372.  
  373.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the audio CPU */
  374.     ROM_LOAD( "1943.05",      0x00000, 0x8000, 0xee2bd2d7 )
  375.  
  376.     ROM_REGION( 0x8000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  377.     ROM_LOAD( "1943.04",      0x00000, 0x8000, 0x46cb9d3d )    /* characters */
  378.  
  379.     ROM_REGION( 0x40000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  380.     ROM_LOAD( "1943.15",      0x00000, 0x8000, 0x6b1a0443 )    /* bg tiles */
  381.     ROM_LOAD( "1943.16",      0x08000, 0x8000, 0x23c908c2 )
  382.     ROM_LOAD( "1943.17",      0x10000, 0x8000, 0x46bcdd07 )
  383.     ROM_LOAD( "1943.18",      0x18000, 0x8000, 0xe6ae7ba0 )
  384.     ROM_LOAD( "1943.19",      0x20000, 0x8000, 0x868ababc )
  385.     ROM_LOAD( "1943.20",      0x28000, 0x8000, 0x0917e5d4 )
  386.     ROM_LOAD( "1943.21",      0x30000, 0x8000, 0x9bfb0d89 )
  387.     ROM_LOAD( "1943.22",      0x38000, 0x8000, 0x04f3c274 )
  388.  
  389.     ROM_REGION( 0x10000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  390.     ROM_LOAD( "1943.24",      0x00000, 0x8000, 0x11134036 )    /* fg tiles */
  391.     ROM_LOAD( "1943.25",      0x08000, 0x8000, 0x092cf9c1 )
  392.  
  393.     ROM_REGION( 0x40000, REGION_GFX4 | REGIONFLAG_DISPOSE )
  394.     ROM_LOAD( "1943.06",      0x00000, 0x8000, 0x97acc8af )    /* sprites */
  395.     ROM_LOAD( "1943.07",      0x08000, 0x8000, 0xd78f7197 )
  396.     ROM_LOAD( "1943.08",      0x10000, 0x8000, 0x1a626608 )
  397.     ROM_LOAD( "1943.09",      0x18000, 0x8000, 0x92408400 )
  398.     ROM_LOAD( "1943.10",      0x20000, 0x8000, 0x8438a44a )
  399.     ROM_LOAD( "1943.11",      0x28000, 0x8000, 0x6c69351d )
  400.     ROM_LOAD( "1943.12",      0x30000, 0x8000, 0x5e7efdb7 )
  401.     ROM_LOAD( "1943.13",      0x38000, 0x8000, 0x1143829a )
  402.  
  403.     ROM_REGION( 0x10000, REGION_GFX5 )    /* tilemaps */
  404.     ROM_LOAD( "1943.14",      0x0000, 0x8000, 0x4d3c6401 )    /* front background */
  405.     ROM_LOAD( "1943.23",      0x8000, 0x8000, 0xa52aecbd )    /* back background */
  406.  
  407.     ROM_REGION( 0x0c00, REGION_PROMS )
  408.     ROM_LOAD( "bmprom.01",    0x0000, 0x0100, 0x74421f18 )    /* red component */
  409.     ROM_LOAD( "bmprom.02",    0x0100, 0x0100, 0xac27541f )    /* green component */
  410.     ROM_LOAD( "bmprom.03",    0x0200, 0x0100, 0x251fb6ff )    /* blue component */
  411.     ROM_LOAD( "bmprom.05",    0x0300, 0x0100, 0x206713d0 )    /* char lookup table */
  412.     ROM_LOAD( "bmprom.10",    0x0400, 0x0100, 0x33c2491c )    /* foreground lookup table */
  413.     ROM_LOAD( "bmprom.09",    0x0500, 0x0100, 0xaeea4af7 )    /* foreground palette bank */
  414.     ROM_LOAD( "bmprom.12",    0x0600, 0x0100, 0xc18aa136 )    /* background lookup table */
  415.     ROM_LOAD( "bmprom.11",    0x0700, 0x0100, 0x405aae37 )    /* background palette bank */
  416.     ROM_LOAD( "bmprom.08",    0x0800, 0x0100, 0xc2010a9e )    /* sprite lookup table */
  417.     ROM_LOAD( "bmprom.07",    0x0900, 0x0100, 0xb56f30c3 )    /* sprite palette bank */
  418.     ROM_LOAD( "bmprom.04",    0x0a00, 0x0100, 0x91a8a2e1 )    /* priority encoder / palette selector (not used) */
  419.     ROM_LOAD( "bmprom.06",    0x0b00, 0x0100, 0x0eaf5158 )    /* video timing (not used) */
  420. ROM_END
  421.  
  422. ROM_START( 1943kai )
  423.     ROM_REGION( 0x30000, REGION_CPU1 )    /* 64k for code + 128k for the banked ROMs images */
  424.     ROM_LOAD( "1943kai.01",   0x00000, 0x08000, 0x7d2211db )
  425.     ROM_LOAD( "1943kai.02",   0x10000, 0x10000, 0x2ebbc8c5 )
  426.     ROM_LOAD( "1943kai.03",   0x20000, 0x10000, 0x475a6ac5 )
  427.  
  428.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the audio CPU */
  429.     ROM_LOAD( "1943kai.05",   0x00000, 0x8000, 0x25f37957 )
  430.  
  431.     ROM_REGION( 0x8000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  432.     ROM_LOAD( "1943kai.04",   0x00000, 0x8000, 0x884a8692 )    /* characters */
  433.  
  434.     ROM_REGION( 0x40000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  435.     ROM_LOAD( "1943kai.15",   0x00000, 0x8000, 0x6b1a0443 )    /* bg tiles */
  436.     ROM_LOAD( "1943kai.16",   0x08000, 0x8000, 0x9416fe0d )
  437.     ROM_LOAD( "1943kai.17",   0x10000, 0x8000, 0x3d5acab9 )
  438.     ROM_LOAD( "1943kai.18",   0x18000, 0x8000, 0x7b62da1d )
  439.     ROM_LOAD( "1943kai.19",   0x20000, 0x8000, 0x868ababc )
  440.     ROM_LOAD( "1943kai.20",   0x28000, 0x8000, 0xb90364c1 )
  441.     ROM_LOAD( "1943kai.21",   0x30000, 0x8000, 0x8c7fe74a )
  442.     ROM_LOAD( "1943kai.22",   0x38000, 0x8000, 0xd5ef8a0e )
  443.  
  444.     ROM_REGION( 0x10000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  445.     ROM_LOAD( "1943kai.24",   0x00000, 0x8000, 0xbf186ef2 )    /* fg tiles */
  446.     ROM_LOAD( "1943kai.25",   0x08000, 0x8000, 0xa755faf1 )
  447.  
  448.     ROM_REGION( 0x40000, REGION_GFX4 | REGIONFLAG_DISPOSE )
  449.     ROM_LOAD( "1943kai.06",   0x00000, 0x8000, 0x5f7e38b3 )    /* sprites */
  450.     ROM_LOAD( "1943kai.07",   0x08000, 0x8000, 0xff3751fd )
  451.     ROM_LOAD( "1943kai.08",   0x10000, 0x8000, 0x159d51bd )
  452.     ROM_LOAD( "1943kai.09",   0x18000, 0x8000, 0x8683e3d2 )
  453.     ROM_LOAD( "1943kai.10",   0x20000, 0x8000, 0x1e0d9571 )
  454.     ROM_LOAD( "1943kai.11",   0x28000, 0x8000, 0xf1fc5ee1 )
  455.     ROM_LOAD( "1943kai.12",   0x30000, 0x8000, 0x0f50c001 )
  456.     ROM_LOAD( "1943kai.13",   0x38000, 0x8000, 0xfd1acf8e )
  457.  
  458.     ROM_REGION( 0x10000, REGION_GFX5 )    /* tilemaps */
  459.     ROM_LOAD( "1943kai.14",   0x0000, 0x8000, 0xcf0f5a53 )    /* front background */
  460.     ROM_LOAD( "1943kai.23",   0x8000, 0x8000, 0x17f77ef9 )    /* back background */
  461.  
  462.     ROM_REGION( 0x0c00, REGION_PROMS )
  463.     ROM_LOAD( "bmk01.bin",    0x0000, 0x0100, 0xe001ea33 )    /* red component */
  464.     ROM_LOAD( "bmk02.bin",    0x0100, 0x0100, 0xaf34d91a )    /* green component */
  465.     ROM_LOAD( "bmk03.bin",    0x0200, 0x0100, 0x43e9f6ef )    /* blue component */
  466.     ROM_LOAD( "bmk05.bin",    0x0300, 0x0100, 0x41878934 )    /* char lookup table */
  467.     ROM_LOAD( "bmk10.bin",    0x0400, 0x0100, 0xde44b748 )    /* foreground lookup table */
  468.     ROM_LOAD( "bmk09.bin",    0x0500, 0x0100, 0x59ea57c0 )    /* foreground palette bank */
  469.     ROM_LOAD( "bmk12.bin",    0x0600, 0x0100, 0x8765f8b0 )    /* background lookup table */
  470.     ROM_LOAD( "bmk11.bin",    0x0700, 0x0100, 0x87a8854e )    /* background palette bank */
  471.     ROM_LOAD( "bmk08.bin",    0x0800, 0x0100, 0xdad17e2d )    /* sprite lookup table */
  472.     ROM_LOAD( "bmk07.bin",    0x0900, 0x0100, 0x76307f8d )    /* sprite palette bank */
  473.     ROM_LOAD( "bmprom.04",    0x0a00, 0x0100, 0x91a8a2e1 )    /* priority encoder / palette selector (not used) */
  474.     ROM_LOAD( "bmprom.06",    0x0b00, 0x0100, 0x0eaf5158 )    /* video timing (not used) */
  475. ROM_END
  476.  
  477.  
  478.  
  479. GAMEX( 1987, 1943,    0,    1943, 1943, 0, ROT270, "Capcom", "1943 - The Battle of Midway (US)", GAME_NO_COCKTAIL )
  480. GAMEX( 1987, 1943j,   1943, 1943, 1943, 0, ROT270, "Capcom", "1943 - The Battle of Midway (Japan)", GAME_NO_COCKTAIL )
  481. GAMEX( 1987, 1943kai, 0,    1943, 1943, 0, ROT270, "Capcom", "1943 Kai", GAME_NO_COCKTAIL )
  482.